
/**
 *
 * @param <E> Esto es para que al momento de implementar esata interface, pueda elegirse con que clase de objeto se utilizara, es conocido como generico.
 * @author Alejandro Rojas Flores  carne 1010
 */
public interface Queue <E> {
    
    /**
     *Procedimiento que permite el ingreso de un elemento a la cola, este elemento es agregado al final de cola. 
     * @param value Es el parametro que representa al elemento que se desea que sea agregado al final de la cola.
     */
    public void offer(E value);
// post: the value is added to the tail of the structure
/**
 *Procedimiento que devuelve el elemento que se encuentra al inicio de la cola, y luego lo remueve de la cola.
 *de encontrarse vacia la cola devuelve null como resultado. 
 * @return Devuelve null si la cola se encuentra vacia, sino devuelve el elemento que esta al inicio de la cola.
 */
public E poll();
// pre: the queue is not empty
// post: the head of the queue is removed and returned
/**
 * Procedimiento que devuelve el primer elemento de la cola, pero sin removerlo de la cola, de encontrase vacia la cola devuelve un null.
 * @return devuelve null de encontrarse vacia la cola, sino devuelve el primer elemento en la cola.
 */
public E peek();
// pre: the queue is not empty
// post: the element at the head of the queue is returned
/**
 * Procedimiento que permite conocer si la cola se encuentra vacia.
 * @return True si la cola esta vacio, de lo contrario devuelve False.
 */
public boolean isEmpty();

/**
 * Procedimiento que permite conocer la cantidad de elementos que se encuentran en la cola.
 * @return Devuelve el valor de la cantidad de elementos que se encuentran en la cola, es un int.
 */
public int size();

}
